package com.ecoolex.hotel.saas.entity;

import com.ecoolex.framework.common.annotation.Description;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import org.springframework.lang.NonNull;

/**
 *
 *   商户微信配置<br>
 *<br>
 * 数据表： store_weixin_config
 *
 */
@Description({"商户微信配置"})
public class StoreWeixinConfig implements Serializable {
    public static final Boolean IS_DELETED = Deleted.IS_DELETED.value();

    public static final Boolean NOT_DELETED = Deleted.NOT_DELETED.value();

    /**
     *
     *   商户Id    <br>
     *<br>
     * 字段名： store_weixin_config.StoreId
     */
    @Description({"商户Id", "不能为空", "数据长度: 10"})
    @NonNull
    private Integer storeId;

    /**
     *
     *   应用Id    <br>
     *<br>
     * 字段名： store_weixin_config.AppId
     */
    @Description({"应用Id", "不能为空", "数据长度: 50"})
    @NonNull
    private String appId;

    /**
     *
     *   应用秘钥    <br>
     *<br>
     * 字段名： store_weixin_config.Secret
     */
    @Description({"应用秘钥", "不能为空", "数据长度: 100"})
    @NonNull
    private String secret;

    /**
     *
     *   商户号    <br>
     *<br>
     * 字段名： store_weixin_config.MchId
     */
    @Description({"商户号", "数据长度: 50"})
    private String mchId;

    /**
     *
     *   商户密钥    <br>
     *<br>
     * 字段名： store_weixin_config.MchKey
     */
    @Description({"商户密钥", "数据长度: 100"})
    private String mchKey;

    /**
     *
     *   企业支付密钥    <br>
     *<br>
     * 字段名： store_weixin_config.EntPayKey
     */
    @Description({"企业支付密钥", "数据长度: 100"})
    private String entPayKey;

    /**
     *
     *   微信支付异步回调地址    <br>
     *<br>
     * 字段名： store_weixin_config.NotifyUrl
     */
    @Description({"微信支付异步回调地址", "数据长度: 200"})
    private String notifyUrl;

    /**
     *
     *   商户p12证书文件路径    <br>
     *<br>
     * 字段名： store_weixin_config.KeyPath
     */
    @Description({"商户p12证书文件路径", "数据长度: 200"})
    private String keyPath;

    /**
     *
     *   app类型：1-公众号；2-小程序；3-App    <br>
     *<br>
     * 字段名： store_weixin_config.Type
     */
    @Description({"app类型：1-公众号；2-小程序；3-App", "不能为空", "数据长度: 5"})
    @NonNull
    private Integer type;

    /**
     *
     *   应用名称    <br>
     *<br>
     * 字段名： store_weixin_config.Name
     */
    @Description({"应用名称", "不能为空", "数据长度: 100"})
    @NonNull
    private String name;

    /**
     *
     *   描述    <br>
     *<br>
     * 字段名： store_weixin_config.Description
     */
    @Description({"描述", "数据长度: 500"})
    private String description;

    /**
     *
     *   支持线上企业付款    <br>
     *<br>
     * 字段名： store_weixin_config.CanOnlineEntPay
     */
    @Description({"支持线上企业付款", "不能为空", "数据长度: 1"})
    @NonNull
    private Boolean canOnlineEntPay;

    /**
     *
     *   H5用户访问地址    <br>
     *<br>
     * 字段名： store_weixin_config.FrontAccessUrl
     */
    @Description({"H5用户访问地址", "数据长度: 100"})
    private String frontAccessUrl;

    /**
     *
     *   逻辑删除    <br>
     *<br>
     * 字段名： store_weixin_config.Deleted
     */
    @Description({"逻辑删除", "不能为空", "数据长度: 1"})
    @NonNull
    private Boolean deleted;

    /**
     *
     *   创建用户    <br>
     *<br>
     * 字段名： store_weixin_config.CreateUser
     */
    @Description({"创建用户", "不能为空", "数据长度: 50"})
    @NonNull
    private String createUser;

    /**
     *
     *   创建时间    <br>
     *<br>
     * 字段名： store_weixin_config.CreateTime
     */
    @Description({"创建时间", "不能为空", "数据长度: 26"})
    @NonNull
    private Date createTime;

    /**
     *
     *   修改用户    <br>
     *<br>
     * 字段名： store_weixin_config.UpdateUser
     */
    @Description({"修改用户", "不能为空", "数据长度: 50"})
    @NonNull
    private String updateUser;

    /**
     *
     *   修改时间    <br>
     *<br>
     * 字段名： store_weixin_config.UpdateTime
     */
    @Description({"修改时间", "不能为空", "数据长度: 26"})
    @NonNull
    private Date updateTime;

    private static final long serialVersionUID = 1L;

    /**
     * 获取参数<br><br>
     *
     *   商户Id    <br>
     *<br>
     * 字段名： store_weixin_config.StoreId
     */
    public Integer getStoreId() {
        return storeId;
    }

    /**
     * 设置参数<br><br>
     *
     *   商户Id<br>
     *<br>
     * 字段名： store_weixin_config.StoreId
     */
    public void setStoreId(Integer storeId) {
        this.storeId = storeId;
    }

    /**
     * 获取参数<br><br>
     *
     *   应用Id    <br>
     *<br>
     * 字段名： store_weixin_config.AppId
     */
    public String getAppId() {
        return appId;
    }

    /**
     * 设置参数<br><br>
     *
     *   应用Id<br>
     *<br>
     * 字段名： store_weixin_config.AppId
     */
    public void setAppId(String appId) {
        this.appId = appId == null ? null : appId.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   应用秘钥    <br>
     *<br>
     * 字段名： store_weixin_config.Secret
     */
    public String getSecret() {
        return secret;
    }

    /**
     * 设置参数<br><br>
     *
     *   应用秘钥<br>
     *<br>
     * 字段名： store_weixin_config.Secret
     */
    public void setSecret(String secret) {
        this.secret = secret == null ? null : secret.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   商户号    <br>
     *<br>
     * 字段名： store_weixin_config.MchId
     */
    public String getMchId() {
        return mchId;
    }

    /**
     * 设置参数<br><br>
     *
     *   商户号<br>
     *<br>
     * 字段名： store_weixin_config.MchId
     */
    public void setMchId(String mchId) {
        this.mchId = mchId == null ? null : mchId.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   商户密钥    <br>
     *<br>
     * 字段名： store_weixin_config.MchKey
     */
    public String getMchKey() {
        return mchKey;
    }

    /**
     * 设置参数<br><br>
     *
     *   商户密钥<br>
     *<br>
     * 字段名： store_weixin_config.MchKey
     */
    public void setMchKey(String mchKey) {
        this.mchKey = mchKey == null ? null : mchKey.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   企业支付密钥    <br>
     *<br>
     * 字段名： store_weixin_config.EntPayKey
     */
    public String getEntPayKey() {
        return entPayKey;
    }

    /**
     * 设置参数<br><br>
     *
     *   企业支付密钥<br>
     *<br>
     * 字段名： store_weixin_config.EntPayKey
     */
    public void setEntPayKey(String entPayKey) {
        this.entPayKey = entPayKey == null ? null : entPayKey.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   微信支付异步回调地址    <br>
     *<br>
     * 字段名： store_weixin_config.NotifyUrl
     */
    public String getNotifyUrl() {
        return notifyUrl;
    }

    /**
     * 设置参数<br><br>
     *
     *   微信支付异步回调地址<br>
     *<br>
     * 字段名： store_weixin_config.NotifyUrl
     */
    public void setNotifyUrl(String notifyUrl) {
        this.notifyUrl = notifyUrl == null ? null : notifyUrl.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   商户p12证书文件路径    <br>
     *<br>
     * 字段名： store_weixin_config.KeyPath
     */
    public String getKeyPath() {
        return keyPath;
    }

    /**
     * 设置参数<br><br>
     *
     *   商户p12证书文件路径<br>
     *<br>
     * 字段名： store_weixin_config.KeyPath
     */
    public void setKeyPath(String keyPath) {
        this.keyPath = keyPath == null ? null : keyPath.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   app类型：1-公众号；2-小程序；3-App    <br>
     *<br>
     * 字段名： store_weixin_config.Type
     */
    public Integer getType() {
        return type;
    }

    /**
     * 设置参数<br><br>
     *
     *   app类型：1-公众号；2-小程序；3-App<br>
     *<br>
     * 字段名： store_weixin_config.Type
     */
    public void setType(Integer type) {
        this.type = type;
    }

    /**
     * 获取参数<br><br>
     *
     *   应用名称    <br>
     *<br>
     * 字段名： store_weixin_config.Name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置参数<br><br>
     *
     *   应用名称<br>
     *<br>
     * 字段名： store_weixin_config.Name
     */
    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   描述    <br>
     *<br>
     * 字段名： store_weixin_config.Description
     */
    public String getDescription() {
        return description;
    }

    /**
     * 设置参数<br><br>
     *
     *   描述<br>
     *<br>
     * 字段名： store_weixin_config.Description
     */
    public void setDescription(String description) {
        this.description = description == null ? null : description.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   支持线上企业付款    <br>
     *<br>
     * 字段名： store_weixin_config.CanOnlineEntPay
     */
    public Boolean getCanOnlineEntPay() {
        return canOnlineEntPay;
    }

    /**
     * 设置参数<br><br>
     *
     *   支持线上企业付款<br>
     *<br>
     * 字段名： store_weixin_config.CanOnlineEntPay
     */
    public void setCanOnlineEntPay(Boolean canOnlineEntPay) {
        this.canOnlineEntPay = canOnlineEntPay;
    }

    /**
     * 获取参数<br><br>
     *
     *   H5用户访问地址    <br>
     *<br>
     * 字段名： store_weixin_config.FrontAccessUrl
     */
    public String getFrontAccessUrl() {
        return frontAccessUrl;
    }

    /**
     * 设置参数<br><br>
     *
     *   H5用户访问地址<br>
     *<br>
     * 字段名： store_weixin_config.FrontAccessUrl
     */
    public void setFrontAccessUrl(String frontAccessUrl) {
        this.frontAccessUrl = frontAccessUrl == null ? null : frontAccessUrl.trim();
    }

    public void andLogicalDeleted(boolean deleted) {
        setDeleted(deleted ? Deleted.IS_DELETED.value() : Deleted.NOT_DELETED.value());
    }

    /**
     * 获取参数<br><br>
     *
     *   逻辑删除    <br>
     *<br>
     * 字段名： store_weixin_config.Deleted
     */
    public Boolean getDeleted() {
        return deleted;
    }

    /**
     * 设置参数<br><br>
     *
     *   逻辑删除<br>
     *<br>
     * 字段名： store_weixin_config.Deleted
     */
    public void setDeleted(Boolean deleted) {
        this.deleted = deleted;
    }

    /**
     * 获取参数<br><br>
     *
     *   创建用户    <br>
     *<br>
     * 字段名： store_weixin_config.CreateUser
     */
    public String getCreateUser() {
        return createUser;
    }

    /**
     * 设置参数<br><br>
     *
     *   创建用户<br>
     *<br>
     * 字段名： store_weixin_config.CreateUser
     */
    public void setCreateUser(String createUser) {
        this.createUser = createUser == null ? null : createUser.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   创建时间    <br>
     *<br>
     * 字段名： store_weixin_config.CreateTime
     */
    public Date getCreateTime() {
        return createTime;
    }

    /**
     * 设置参数<br><br>
     *
     *   创建时间<br>
     *<br>
     * 字段名： store_weixin_config.CreateTime
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取参数<br><br>
     *
     *   修改用户    <br>
     *<br>
     * 字段名： store_weixin_config.UpdateUser
     */
    public String getUpdateUser() {
        return updateUser;
    }

    /**
     * 设置参数<br><br>
     *
     *   修改用户<br>
     *<br>
     * 字段名： store_weixin_config.UpdateUser
     */
    public void setUpdateUser(String updateUser) {
        this.updateUser = updateUser == null ? null : updateUser.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   修改时间    <br>
     *<br>
     * 字段名： store_weixin_config.UpdateTime
     */
    public Date getUpdateTime() {
        return updateTime;
    }

    /**
     * 设置参数<br><br>
     *
     *   修改时间<br>
     *<br>
     * 字段名： store_weixin_config.UpdateTime
     */
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public enum Deleted {
        NOT_DELETED(new Boolean("false"), "未删除"),
        IS_DELETED(new Boolean("true"), "已删除");

        private final Boolean value;

        private final String name;

        Deleted(Boolean value, String name) {
            this.value = value;
            this.name = name;
        }

        public Boolean getValue() {
            return this.value;
        }

        public Boolean value() {
            return this.value;
        }

        public String getName() {
            return this.name;
        }
    }

    public enum Column {
        storeId("StoreId", "storeId", "INTEGER", false),
        appId("AppId", "appId", "VARCHAR", false),
        secret("Secret", "secret", "VARCHAR", false),
        mchId("MchId", "mchId", "VARCHAR", false),
        mchKey("MchKey", "mchKey", "VARCHAR", false),
        entPayKey("EntPayKey", "entPayKey", "VARCHAR", false),
        notifyUrl("NotifyUrl", "notifyUrl", "VARCHAR", false),
        keyPath("KeyPath", "keyPath", "VARCHAR", false),
        type("Type", "type", "INTEGER", true),
        name("Name", "name", "VARCHAR", true),
        description("Description", "description", "VARCHAR", false),
        canOnlineEntPay("CanOnlineEntPay", "canOnlineEntPay", "BIT", false),
        frontAccessUrl("FrontAccessUrl", "frontAccessUrl", "VARCHAR", false),
        deleted("Deleted", "deleted", "BIT", false),
        createUser("CreateUser", "createUser", "VARCHAR", true),
        createTime("CreateTime", "createTime", "TIMESTAMP", false),
        updateUser("UpdateUser", "updateUser", "VARCHAR", false),
        updateTime("UpdateTime", "updateTime", "TIMESTAMP", false);

        private static final String BEGINNING_DELIMITER = "`";

        private static final String ENDING_DELIMITER = "`";

        private final String column;

        private final boolean isColumnNameDelimited;

        private final String javaProperty;

        private final String jdbcType;

        public String value() {
            return this.column;
        }

        public String getValue() {
            return this.column;
        }

        public String getJavaProperty() {
            return this.javaProperty;
        }

        public String getJdbcType() {
            return this.jdbcType;
        }

        Column(String column, String javaProperty, String jdbcType, boolean isColumnNameDelimited) {
            this.column = column;
            this.javaProperty = javaProperty;
            this.jdbcType = jdbcType;
            this.isColumnNameDelimited = isColumnNameDelimited;
        }

        public String desc() {
            return this.getEscapedColumnName() + " DESC";
        }

        public String asc() {
            return this.getEscapedColumnName() + " ASC";
        }

        public static Column[] excludes(Column ... excludes) {
            ArrayList<Column> columns = new ArrayList<>(Arrays.asList(Column.values()));
            if (excludes != null && excludes.length > 0) {
                columns.removeAll(new ArrayList<>(Arrays.asList(excludes)));
            }
            return columns.toArray(new Column[]{});
        }

        public String getEscapedColumnName() {
            if (this.isColumnNameDelimited) {
                return new StringBuilder().append(BEGINNING_DELIMITER).append(this.column).append(ENDING_DELIMITER).toString();
            } else {
                return this.column;
            }
        }

        public String getAliasedEscapedColumnName() {
            StringBuilder sb = new StringBuilder();
            sb.append("storeweixinconfig.");
            sb.append(this.getEscapedColumnName());
            sb.append(" as ");
            if (this.isColumnNameDelimited) {
                sb.append(BEGINNING_DELIMITER);
            }
            sb.append("storeweixinconfig_");
            sb.append(this.column);
            if (this.isColumnNameDelimited) {
                sb.append(BEGINNING_DELIMITER);
            }
            return sb.toString();
        }
    }
}